
#include "timer_delays.h"

void delay(u32 n)
{
	while (n--)
		;
}

void DelayUS(u32 us)
{

	// 开启时钟使能
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);
	// 将自动重装载定时器设置为1000，降频（71+1）倍，达到微妙一次变频，周期达到1微秒

	// TIM6->ARR = 1000;//自动重装载定时器大小，改变到达的时间
	// TIM6->PSC = 71;
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	TIM_TimeBaseInitStruct.TIM_Period = us; // 每n微秒一个溢出事件
	TIM_TimeBaseInitStruct.TIM_Prescaler = 71;
	TIM_TimeBaseInit(TIM6, &TIM_TimeBaseInitStruct);
	// TIM6->CR1 |= 1;
	TIM_Cmd(TIM6, ENABLE);


		// TIM6->SR &= ~-1;
		TIM_ClearFlag(TIM6, TIM_FLAG_Update);
		// while (!(TIM6->SR & 1));
		while (!TIM_GetFlagStatus(TIM6, TIM_FLAG_Update))
			;
	// TIM6->CR1 &= ~1;
	TIM_Cmd(TIM6, DISABLE);
}

void DelayMS(u32 n)
{

	// 开启时钟使能
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);
	// 将自动重装载定时器设置为1000，降频（71+1）倍，达到微妙一次变频，周期达到1微秒

	// TIM6->ARR = 1000;//自动重装载定时器大小，改变到达的时间
	// TIM6->PSC = 71;
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	TIM_TimeBaseInitStruct.TIM_Period = 1000; // 一毫秒触发一次溢出事件
	TIM_TimeBaseInitStruct.TIM_Prescaler = 71;
	TIM_TimeBaseInit(TIM6, &TIM_TimeBaseInitStruct);

	// TIM6->CR1 |= 1;
	TIM_Cmd(TIM6, ENABLE);

	for (int i = 0; i < n; i++)
	{
		// TIM6->SR &= ~-1;
		TIM_ClearFlag(TIM6, TIM_FLAG_Update);
		// while (!(TIM6->SR & 1));
		while (!TIM_GetFlagStatus(TIM6, TIM_FLAG_Update))
			;
	}
	// TIM6->CR1 &= ~1;
	TIM_Cmd(TIM6, DISABLE);
}

